﻿using Adnc.Infra.Entities;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text;

namespace WYT.Ord.Repository.Entities
{
    /// <summary>
    /// 优惠券
    /// </summary>
    [Table("ord_Coupon"), Comment("优惠券"), Index(nameof(Name))]
    public class Coupon : EfEntity
    {
        /// <summary>
        /// 优惠券名称
        /// </summary>
        [Comment("优惠券名称"), MaxLength(50)]
        public string Name { get; set; }

        /// <summary>
        /// 使用说明
        /// </summary>
        [Comment("使用说明"), MaxLength(2000)]
        public string Instructions { get; set; }
        /// <summary>
        /// 优惠类型
        /// </summary>
        [Comment("优惠类型(1:体验券,2:满减券,3：折扣券)")]
        public int Type { get; set; }

        /// <summary>
        /// 生效方式(1、得到优惠券立即生效，2、固定生效时间，3、参数）
        /// </summary>
        [Comment("生效方式(1、得到优惠券立即生效，2、固定生效时间，3、参数）")]
        public int EffectiveType { get; set; }

        /// <summary>
        /// 领取规则(1、领一次，2、每天领一次，3、无限制）
        /// </summary>
        [Comment("领取规则(1、领一次，2、每天领一次，3、无限制）")]
        public int ReceiveRule { get; set; }

        /// <summary>
        /// 有效开始日期（领取）
        /// </summary>
        [Comment("有效开始日期（领取）")]
        public DateTime? GetStartTime { get; set; }

        /// <summary>
        /// 有效截至日期（领取）
        /// </summary>
        [Comment("有效截至日期（领取）")]
        public DateTime GetEndTime { get; set; }

        /// <summary>
        /// 固定生效开始时间
        /// </summary>
        [Comment("有效开始时间")]
        public DateTime? StartTime { get; set; }

        /// <summary>
        /// 有效期（天）
        /// </summary>
        [Comment("有效期（天）")]
        public int? Validity { get; set; }

        /// <summary>
        /// 可领取的数量
        /// </summary>
        [Comment("可领取的数量")]
        public int MayCount { get; set; }

        /// <summary>
        /// 已领取的数量
        /// </summary>
        [Comment("已领取的数量")]
        public int AlreadyCount { get; set; }
        /// <summary>
        /// 是否可以叠加使用
        /// </summary>
        [Comment("是否可以叠加使用")]
        public bool IsSuperposition { get; set; }

        /// <summary>
        /// 优惠金额或者折扣数
        /// </summary>
        [Comment("优惠金额或者折扣数"), Column(TypeName = "decimal(18,2)")]
        public Decimal Amount { get; set; }

        /// <summary>
        /// 使用条件
        /// </summary>
        [Comment("使用条件"), Column(TypeName = "decimal(18,2)")]
        public Decimal ReachAmount { get; set; }

        /// <summary>
        /// 最大优惠金额
        /// </summary>
        [Comment("最大优惠金额"), Column(TypeName = "decimal(18,2)")]
        public Decimal MaxAmount { get; set; }

        /// <summary>
        /// 商品使用限制 1：全场;2：部分商品;3:部分商家
        /// </summary>
        [Comment("商品使用限制 1：全场;2：部分商品;3：第三方商品;4：自营商品")]
        public int GoodsAstrict { get; set; }

        /// <summary>
        /// 适用的商品，GoodsAstrict = 2 时需要指定适用商品
        /// </summary>
        [Comment("适用的商品，GoodsAstrict = 2 时需要指定适用商品"), MaxLength(2000)]
        public string AvailableGoods { get; set; } = "[]";

        /// <summary>
        /// 创建时间
        /// </summary>
        [Comment("创建时间")]
        public DateTime CreateTime { get; set; }

        /// <summary>
        /// 状态
        /// </summary>
        [Comment("状态 -1:删除，0：有效")]
        public int State { get; set; }
    }
}
